package homeWork;

import java.util.Random;
import java.util.Scanner;

/**
 * 提高题
 * 生成一个4位验证码(数字和字母的组合)
 * 然后输出到控制台并提示用户输入该验证码，只要用户输入正确(无论大小写都算)，
 * 就输出:验证码正确，否则输出:验证码错误
 *
 * 验证码如何生成?
 * 思路导向填空:
 * 1:要先确定生成的内容范围(列出所有可以出现的字符):
 * 	0-9，a-z ，A-Z
 * 2:先思考如何生成其中的一个字符呢？
 * 通过对照ASCII码限定随机范围来生成合适的整数然后转字符型
 *   2.1:确定怎么保存这些可以出现的字符:
 *   字符串或数组保存
 *   2.2:怎么能随机抽选一个
 *   Random方法实现
 * 3:既然可以生成一个，如何做到生成4个或更多个?  
 *  循环n次即可
 * 4:怎么在生成这些字符的过程中将他们组成一个字符串?
 * 一是用tostring()将字符型转字符串然后挨个累加进一个字符串中(这样做会生成n次对象）
 * 二是用StringBuilder类的append方法将字符组合起来，然后用toString方法转成字符串型（生成1次对象即可）
 * 5:获取到用户输入的字符串后怎么与之比较,要利用到哪些字符串操作?
 * 1.用两次toLowerCase或toUpperCase方法将输入值和验证码值都直接转大写或小写，然后用equals方法来直接判断字符串内容是否相等
 * 2.直接使用equalsIgnoreCase方法也可以完成这个效果返回布尔值
 * @author Xiloer
 *
 */
public class Test06 {
	static int num;
	public static void main(String[] args) {
		String identityCode = getRandIdentityCode();
		System.out.println("验证码为："+identityCode);
		String inputCode = inputIdentityCode();
		String ret =  jugeCode(identityCode,inputCode);
		System.out.println(ret);
	}
	/**
	 * 生成四位随机验证码(字母与数字组成)
	 * @code 验证码
	 */
	public static String getRandIdentityCode(){
		StringBuilder code =new StringBuilder();
		Random rand= new Random();
		for (int i = 0; i<4;i++) {
			num = rand.nextInt(75) + 48;//0-z范围[48-123)
			if (num <= 57 || num >= 65 && num <= 90 || num >= 97 ) {
				code.append((char)num);
			}
			else {
				i--;//不通过则重新随机
			}
		}
		String code1;
		code1= code.toString();
		return code1;
	}
	/**
	 * 控制用户输入
	 */

	public static  String inputIdentityCode(){
		System.out.println("输入验证码(大小写无关)");
		Scanner sc = new Scanner(System.in);
		String code = sc.nextLine();
		sc.close();
		return code;
	}
	/**
	 * 判断验证码是否正确
	 * @param identityCode 随机生成的验证码
	 * @param inputCode  用户输入的验证码
	 * @return 正确或错误
	 */

	public  static  String jugeCode(String identityCode , String inputCode){
			if (identityCode.equalsIgnoreCase(inputCode)){
				return "验证码正确";
			}
			else
				System.out.println();
			return "验证码错误";
	}
}



/*
		提示代码:
		需要用到的语句，尝试按照正确顺序将下列代码并放在main方法中完成需求，
		并在注释中标注每句话的作用，

		//【在这里标注该句代码意义】//设置一个字符串来保存z-9的字母与数字
		String line = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

		//【在这里标注该句代码意义】
		String code = "";

		//【在这里标注该句代码意义】
		Random random = new Random();

		//【在这里标注该句代码意义】
		for(int i=0;i<4;i++) {

		}
		//【在这里标注该句代码意义】
		char c = line.charAt(index);

		//【在这里标注该句代码意义】
		int index = random.nextInt(line.length());

		//【在这里标注该句代码意义】
		code+=c;

		//【在这里标注该句代码意义】
		System.out.println("请输入验证码:");

		//【在这里标注该句代码意义】
		Scanner scanner = new Scanner(System.in);

		//【在这里标注该句代码意义】
		if(code.equalsIgnoreCase(input)){

		}else{

		}

		//【在这里标注该句代码意义】
		System.out.println("验证成功!");

		//【在这里标注该句代码意义】
		System.out.println("验证失败!");

		//【在这里标注该句代码意义】
		String input = scanner.nextLine();

		//【在这里标注该句代码意义】
		System.out.println("验证码:"+code);
 */




